1. /* sdfsinhs.cpp by K.Tsuru */
  2. // function ID 3308 DRADIX
  3. /****************************************
  4. SDouble class
  5. sinh x by series |x| < DRADIX.
  6. sinh x = x/1! + x^3/3! + x^5/5! + .....
  7. *****************************************/
  8. #ifndef SN_H
  9. #include "sn.h"
  10. #endif
  11. static const char* func = "SinhSeries";
  12. SDouble SinhSeries(const SDouble& x){
  13. if(x.NetRdxExp() > 1) x.SetError(x.OUT_OF_RANGE, func, 3308);
  14. SDouble sum(x), xsq, t, delta;
  15. sum.FixedPoint(sum.RdxExp());
  16. xsq = x*x;
  17. t = x*xsq;
  18. delta = DsDiv(t, 6); // delta = x^3/6
  19. ulong n = 4uL, mt = sum.SlOpMaxValue(), den;
  20. sum = DDAdd(sum, delta); // sum += delta;
  21. while( delta.Sign(3308) ){
  22. den = n*(n+1uL);
  23. if(den >= mt) break;
  24. t = delta*xsq;
  25. delta = DsDiv(t, den); //It can devide by n(n+1) once.
  26. sum = DDAdd(sum, delta); // sum += delta;
  27. n += 2uL;
  28. }
  29. while(delta.Sign(3308)){
  30. if(n >= mt){
  31. sum.SetError(sum.NOT_CONVERGE, func, -3308);
  32. break;
  33. }
  34. t = delta*xsq;
  35. delta = DsDiv(t, n); delta = DsDiv(delta, n+1uL); //twice
  36. sum = DDAdd(sum, delta); // sum += delta;
  37. n += 2;
  38. }
  39. sum.PointFree();
  40. sum.Reform(3308);
  41. sum.upToTerm = n/2;
  42. return sum;
  43. }

sdfsinhs.cpp : last modifiled at 2015/12/04 10:31:02(1,185 bytes)
created at 2017/10/07 10:22:50
The creation time of this html file is 2017/10/07 11:29:39 (Sat Oct 07 11:29:39 2017).